///*
// *  *****************************************************************************
// *  * Copyright (C) 2022 szjzsoft Co.,Ltd
// *  * All Rights Reserved.
// *  * 本软件为深圳市金政软件技术有限公司（平台）研制。未经本公司正式书面同意，其他任何个人、团体
// *  * 不得使用、复制、修改或发布本软件.
// *  ****************************************************************************
// */
//
//package com.szjz.tool.ocr.controller.ocr;
//
//import cn.hutool.core.text.UnicodeUtil;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.alibaba.fastjson.parser.Feature;
//import com.alibaba.fastjson.serializer.SerializerFeature;
//import com.szjz.tool.ocr.common.JResult;
//import com.szjz.tool.ocr.common.parsetext.InvoiceFeatureFactory;
//import com.szjz.tool.ocr.common.parsetext.OcrTextParseAbstract;
//import com.szjz.tool.ocr.common.parsetext.OcrTextParseFactory;
//import com.szjz.tool.ocr.common.parsetext.OcrTextParseResult;
//import com.szjz.tool.ocr.util.OCRContentParseUtil;
//import com.szjz.tool.ocr.util.OcrTextResponseTransferUtil;
//import com.szjz.tool.ocr.util.StringUtil;
//import io.swagger.annotations.ApiOperation;
//import lombok.extern.slf4j.Slf4j;
//import okhttp3.OkHttpClient;
//import okhttp3.Request;
//import okhttp3.Response;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//import org.springframework.web.servlet.ModelAndView;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.File;
//import java.io.IOException;
//import java.lang.reflect.InvocationTargetException;
//import java.util.*;
//
///**
// * @Desc: OCR调用服务接口
// * @version: 2.0
// * @author: John Goo
// * @date: 2024/11/19 14:48
// **/
//@Slf4j
//@RestController
//@RequestMapping("/ocr")
//public class OcrApiControllerBak {
//
//
//
//    // OCR Text算法服务
//    public static final String OCR_TEXT_URL = "http://localhost:9000/ocr/rec/get/v4?imgPath=";
//
//
//    @ApiOperation(value = "ocr验证原型界面")
//    @GetMapping("/test/verify")
//    public ModelAndView gotoUploadImg(HttpServletRequest request) {
//        ModelAndView view = new ModelAndView("pages/ocr/img-upload-1");
//        return view;
//    }
//
//
//    /********* 图片服务访问地址 ********/
//    public static final String SERVER_IMG_URL = "http://localhost:9901/release/fs/download?relativePath=/fs/#?#";
//
//
//    // latest,最新的，最不稳定的
//    @ApiOperation(value = "上传发票，进入ocr识别界面")
//    @PostMapping("/test/upload")
//    public ModelAndView gotoOcrRec(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
//        long startTime = new Date().getTime();
//        String imgPath = null;
//        // 保存文件目录
//        String rootDir = "D:\\OCR-WORK\\python-work\\mysite\\images\\";
//        String fileName = null;
//
//        // 文件上传
//        for (MultipartFile file : files) {
//            //            // 获取文件名以及后级名
//            fileName = file.getOriginalFilename();
//            // 重新生成文件名（根据具体情况生成对应文件名）
//            //fileName = rootDir+""+fileName;
//            try {
//                file.transferTo(new File(rootDir + fileName));
//                // 关闭文件流
//                //file.getInputStream().close();
//                imgPath = rootDir + fileName;
//            } catch (Exception e) {
//                log.error("【上传图片失败】", e);
//            }
//        }
//        String serverImgUrl = SERVER_IMG_URL.replace("#?#", fileName);
//        ModelAndView view = new ModelAndView("pages/ocr/ocr-rec-verify-2");
//        view.addObject("imgPath", imgPath);
//        view.addObject("serverImgUrl", serverImgUrl);
//        return view;
//    }
//
//
//    @ApiOperation(value = "ocr图片识别-1")
//    @GetMapping("/test/rec/v2_1")
//    public JResult imgRec(HttpServletRequest request) {
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/get?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        log.info("=========== ocr 识别结果 ============");
//
//        // ModelAndView view = new ModelAndView("pages/ocr/ocr-rec-verify");
//        if ("1".equals(opType)) {
//
//        } else {
//
//        }
//        // ************* jsonStr解析处理 ****************//
//        JSONObject data = OCRContentParseUtil.parseSimple(recJsonStr);
//
//        // String dataStr = JSON.toJSONString(data, SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue,SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteNullListAsEmpty);
//
//        // **************************************************
//        log.info("打印识别结果：", data);
//        //  view.addObject("recJson",data);
//        long endTime = new Date().getTime();
//
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        data.put("totalTime", total);
//        //view.addObject("totalTime",total);
//        return JResult.build().ok(data);
//    }
//
//
//    @ApiOperation(value = "ocr图片识别-2")
//    @GetMapping("/test/rec/v2_2")
//    public JResult imgRecV22(HttpServletRequest request) {
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/rec/get/v2?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        log.info("=========== ocr 识别结果 ============");
//        JSONObject data = JSON.parseObject(recJsonStr);
//
//        // 版本v2.9  [ [],[],[]]
//        String arrayStr = data.getString("ocrRet");
//        JSONArray outArray = JSONArray.parseArray(arrayStr);
//        if (outArray.size() > 0) {
//            JSONArray array = JSONArray.parseArray(arrayStr).getJSONArray(0);
//            data.put("ocrRet", array);
//        }
//
//        // **************************************************
//        log.info("打印识别结果：", data);
//        //  view.addObject("recJson",data);
//        long endTime = new Date().getTime();
//
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        data.put("totalTime", total);
//        //view.addObject("totalTime",total);
//        return JResult.build().ok(data);
//    }
//
//
//    @ApiOperation(value = "ocr图片识别-3:火车票解析Demo")
//    @GetMapping("/test/rec/v2_3_bak")
//    public JResult imgRecV23bak(HttpServletRequest request) {
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/get?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        log.info("=========== ocr 解析工厂 ============");
//        // OcrTextParseFactory.parseText(recJsonStr);
//
//
//        // ************* jsonStr解析处理 ****************//
//        JSONObject data = JSON.parseObject(recJsonStr, Feature.OrderedField);
//
//
//        // 参照深航发票识别发票结构
//        JSONObject ticket = new JSONObject();
//        JSONObject trainTicket = new JSONObject();
//        ticket.put("code", "200");
//        ticket.put("message", "操作成功!");
//        ticket.put("data", trainTicket);
//        ticket.put("businessNum", "3235641");
//
//        // 火车票部分
//        trainTicket.put("type", "train_ticket");
//        trainTicket.put("typeDesc", "火车票");
//        JSONArray array = new JSONArray();
//        trainTicket.put("train_data_list", array);
//        // result 结果
//        // JSONObject result = new JSONObject();
//        //result.put("code",0);
//        //  JSONArray retArray = new JSONArray();
//        // result.put("data",retArray);
//        // 遍历json
//        Set set = data.entrySet();
//        Iterator it = set.iterator();
//        int rowCount = 0;
//        while (it.hasNext()) {
//            Map.Entry entry = (Map.Entry) it.next();
//            String key = (String) entry.getKey();
//
//            // 标识有用的内容
//            if (key.contains("IDX_")) {
//                // 只统计有效的内容
//                rowCount++;
//                // 解析标识的内容
//                String value = (String) entry.getValue();
//                JSONArray metaArray = JSONArray.parseArray(value);
//                // 解析内容
//                String rowContent = metaArray.getJSONArray(1).getString(0);
//                switch (key) {
//                    case "IDX_14":
//                        JSONObject ele1 = new JSONObject();
//                        ele1.put("description", "检票口");
//                        ele1.put("key", "check");
//                        ele1.put("value", rowContent);
//                        array.add(ele1);
//                        break;
//                    case "IDX_1":
//                        //火车票红色编码
//                        JSONObject ele2 = new JSONObject();
//                        ele2.put("description", "火车票红色编码");
//                        ele2.put("key", "ticket_number");
//                        ele2.put("value", rowContent);
//                        array.add(ele2);
//                        break;
//                    case "IDX_7":
//                        //出发地
//                        JSONObject ele3 = new JSONObject();
//                        ele3.put("description", "出发地");
//                        ele3.put("key", "departure_station");
//                        ele3.put("value", rowContent);
//                        array.add(ele3);
//                        break;
//                    case "IDX_6":
//
//                        //车次号
//                        JSONObject ele4 = new JSONObject();
//                        ele4.put("description", "车次号");
//                        ele4.put("key", "train_number");
//                        ele4.put("value", rowContent);
//                        array.add(ele4);
//                        break;
//                    case "IDX_8":
//                        //arrival_station	目的地
//                        JSONObject ele5 = new JSONObject();
//                        ele5.put("description", "目的地");
//                        ele5.put("key", "arrival_station");
//                        ele5.put("value", rowContent);
//                        array.add(ele5);
//                        break;
//
////                    case "IDX_6":;
////                        //
////                        JSONObject ele6 = new JSONObject();
////                        ele6.put("description","");
////                        ele6.put("key","");
////                        ele6.put("value",rowContent);
////                        array.add(ele6);
////                        break;
////
////                    case "IDX_7":;
////                        //
////                        JSONObject ele7 = new JSONObject();
////                        ele7.put("description","");
////                        ele7.put("key","");
////                        ele7.put("value",rowContent);
////                        array.add(ele7);
////                        break;
//                    //	乘车时间
//                    case "IDX_3":
//                        ;
//                        //
//                        JSONObject ele8 = new JSONObject();
//                        ele8.put("description", "乘车时间");
//                        ele8.put("key", "departure_date");
//                        ele8.put("value", rowContent);
//                        array.add(ele8);
//                        break;
//
//                    //seat_number	座位号
//                    case "IDX_4":
//                        ;
//                        //
//                        JSONObject ele9 = new JSONObject();
//                        ele9.put("description", "座位号");
//                        ele9.put("key", "seat_number");
//                        ele9.put("value", rowContent);
//                        array.add(ele9);
//                        break;
//                    //price	价格
//                    case "IDX_11":
//                        ;
//                        //
//                        JSONObject ele10 = new JSONObject();
//                        ele10.put("description", "价格");
//                        ele10.put("key", "price");
//                        ele10.put("value", rowContent);
//                        array.add(ele10);
//                        break;
//
////                    //
////                    case "IDX_11":
////                        //
////                        JSONObject ele11 = new JSONObject();
////                        ele11.put("description","");
////                        ele11.put("key","");
////                        ele11.put("value",rowContent);
////                        array.add(ele11);
////                        break;
//
//
//                    //class	座位类别
//                    case "IDX_5":
//                        //
//                        JSONObject ele12 = new JSONObject();
//                        ele12.put("description", "座位类别");
//                        ele12.put("key", "class");
//                        ele12.put("value", rowContent);
//                        array.add(ele12);
//                        break;
//                    //
////                    case "IDX_13":
////                        //
////                        JSONObject ele13 = new JSONObject();
////                        ele13.put("description","");
////                        ele13.put("key","");
////                        ele13.put("value",rowContent);
////                        array.add(ele13);
////                        break;
//                    // passenger_name	乘客名称;passenger_id	乘客身份证号
//                    //2024231998****156X赵璇丽
//                    case "IDX_13":
//                        // @todo,需要解析身份证号和人名
//                        // 姓名
//                        JSONObject ele15 = new JSONObject();
//                        ele15.put("description", "乘客名称");
//                        ele15.put("key", "passenger_name");
//                        ele15.put("value", rowContent);
//                        array.add(ele15);
//                        break;
//
//                    case "IDX_15":
//                        // @todo,需要解析身份证号和人名
//
//                        //身份证号
//                        JSONObject elem15 = new JSONObject();
//                        elem15.put("description", "乘客身份证号");
//                        elem15.put("key", "passenger_iden_no");
//                        elem15.put("value", rowContent);
//                        array.add(elem15);
//
//                        break;
//                    //ticket_id	火车票ID
//                    case "IDX_16":
//                        // @todo "10157310270929E014470天津售" 需要去掉后面的汉字
//
//                        JSONObject ele17 = new JSONObject();
//                        ele17.put("description", "火车票ID");
//                        ele17.put("key", "ticket_id");
//                        ele17.put("value", rowContent);
//                        array.add(ele17);
//                        break;
//
//                }
//
//
//            }
//        }
//
//
//        // **************************************************
//        log.info("打印识别结果：", data);
//        //  view.addObject("recJson",data);
//        long endTime = new Date().getTime();
//
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        data.put("totalTime", total);
//        ticket.put("totalTime", total);
//        ticket.put("rowCount", rowCount);
//        //view.addObject("totalTime",total);
//        return JResult.build().ok(ticket);
//    }
//
//
//    @ApiOperation(value = "ocr图片识别")
//    @PostMapping("/test/rec")
//    public ModelAndView ocrRec(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
//        long startTime = new Date().getTime();
//        // 保存文件目录
//        String rootDir = "D:\\OCR-WORK\\python-work\\mysite\\images\\";
//
//        String imgPath = null;
//
//        // 文件上传
//        for (MultipartFile file : files) {
//            //            // 获取文件名以及后级名
//            String fileName = file.getOriginalFilename();
//            // 重新生成文件名（根据具体情况生成对应文件名）
//            //fileName = rootDir+""+fileName;
//            try {
//                file.transferTo(new File(rootDir + fileName));
//                // 关闭文件流
//                //file.getInputStream().close();
//                imgPath = rootDir + fileName;
//            } catch (Exception e) {
//                log.error("【上传图片失败】", e);
//            }
//        }
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/get?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        log.info("=========== ocr 识别结果 ============");
//
//        ModelAndView view = new ModelAndView("pages/ocr/ocr-rec-verify");
//
//        // ************* jsonStr解析处理 ****************//
//        JSONObject data = OCRContentParseUtil.parseSimple(recJsonStr);
//
//        String dataStr = JSON.toJSONString(data, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteNullListAsEmpty);
//
//        // **************************************************
//        log.info(dataStr);
//        view.addObject("recJson", dataStr);
//        long endTime = new Date().getTime();
//
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        view.addObject("totalTime", total);
//        return view;
//    }
//
//
//    @ApiOperation(value = "ocr图片识别-4:火车票解析(JSON版）")
//    @GetMapping("/test/rec/v2_3")
//    public JSONObject imgRecTrainTicketV23(HttpServletRequest request) {
//
//        // 定义返回结果值
//        JSONObject data = new JSONObject();
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/rec/get/v4?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        log.info("=========== ocr 解析工厂 ============");
//        try {
//
//            OcrTextParseResult result = OcrTextParseFactory.ocrTextRec(recJsonStr);
//            data.put("ocrRet", result.getRetJson());
//        } catch (NoSuchMethodException e) {
//            e.printStackTrace();
//        } catch (InvocationTargetException e) {
//            e.printStackTrace();
//        } catch (IllegalAccessException e) {
//            e.printStackTrace();
//        }
//
//        long endTime = new Date().getTime();
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        data.put("totalTime", total);
//        data.put("code", 0);
//        data.put("msg", "操作成功");
//        return data;
//    }
//
//
//    @ApiOperation(value = "ocr图片识别-4:火车票解析(融合版）")
//    @GetMapping("/test/rec/v2_4")
//    public JSONObject imgRecV24(HttpServletRequest request) {
//
//        // 定义返回结果值
//        JSONObject data = new JSONObject();
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/rec/get/v4?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        log.info("=========== ocr 解析工厂 ============");
//        try {
//
//            OcrTextParseResult result = OcrTextParseFactory.ocrTextRec(recJsonStr);
//            data.put("ocrRet", result.getRetArray());
//        } catch (NoSuchMethodException e) {
//            e.printStackTrace();
//        } catch (InvocationTargetException e) {
//            e.printStackTrace();
//        } catch (IllegalAccessException e) {
//            e.printStackTrace();
//        }
//
//        long endTime = new Date().getTime();
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        data.put("totalTime", total);
//        return data;
//    }
//
//
//    @ApiOperation(value = "ocr图片识别：ocr原生数据")
//    @GetMapping("/test/rec/v2_5")
//    public JSONObject imgRecV25(HttpServletRequest request) {
//
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/rec/get/v4?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        // 定义返回结果值
//        JSONObject data = (JSONObject) JSONObject.parse(recJsonStr);
//        // ocr原生数据预处理：1）结构的转换；2）识别发票的类型
//
//        // ......
//
//        long endTime = new Date().getTime();
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        data.put("totalTime", total);
//        return data;
//    }
//
//    @ApiOperation(value = "ocr图片识别-6:火车票解析(多张上下版式）")
//    @GetMapping("/test/rec/v2_6")
//    public JSONObject imgRecV26(HttpServletRequest request) {
//
//        // 定义返回结果值
//        JSONObject data = new JSONObject();
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/rec/get/v4?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        log.info("=========== ocr 解析工厂 ============");
//
//
//        List result = OcrTextParseFactory.trainTicketMany(recJsonStr);
//        data.put("ocrRet", result);
//
//        long endTime = new Date().getTime();
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        data.put("totalTime", total);
//        return data;
//    }
//
//
//
//    @ApiOperation(value = "ocr图片识别-7: 识别发票类型")
//    @GetMapping("/test/rec/v2_7")
//    public JSONObject identifyType(HttpServletRequest request) {
//
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String OCR_URL = "http://localhost:9000/ocr/rec/get/v4?imgPath=";
//
//        Request requ = new Request.Builder()
//                .url(OCR_URL + imgPath)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        log.info("=========== ocr 解析工厂 ============");
//
//
//        //List result = OcrTextParseFactory.trainTicketMany(recJsonStr);
//        InvoiceFeatureFactory featureFactory = new InvoiceFeatureFactory();
//        JSONObject data = featureFactory.transferAndIdentifyType(recJsonStr);
//      //  data.put("ocrRet", result);
//
//        long endTime = new Date().getTime();
//        // 消耗时间统计
//        long total = endTime - startTime;
//        log.info("=========消耗时间总计：" + total + " ms");
//        data.put("totalTime", total);
//        return data;
//    }
//
//    @ApiOperation(value = "ocr图片识别-8: 发票识别（综合版）")
//    @GetMapping("/test/rec/v2_8")
//    public JResult ocrTextTransfer(HttpServletRequest request) {
//        JResult result = JResult.build();
//
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        String recJsonStr = callOcrTextService(imgPath,opType);
//        log.info("=========== ocr 解析工厂 ============");
//        try {
//            InvoiceFeatureFactory featureFactory = new InvoiceFeatureFactory();
//            JSONObject data = featureFactory.transferAndIdentifyType(recJsonStr);
//            OcrTextParseAbstract textParseEntity = OcrTextParseFactory.textParse(recJsonStr);
//            JSONArray array = OcrTextResponseTransferUtil.transferMix2Json(textParseEntity);
//
//            long endTime = new Date().getTime();
//            // 消耗时间统计
//            long total = endTime - startTime;
//            log.info("=========消耗时间总计：" + total + " ms");
//            data.put("totalTime", total);
//            result.setTotalTime(total);
//            result.setData(array);
//        }catch (Exception e){
//            log.error("[解析发票发生异常]",e);
//            result.failed(e.getMessage());
//        }
//        //
//        return result;
//    }
//
//
//
//    private String callOcrTextService(String imgPath,String opType){
//
//        log.info("【请求OCR算法服务】 imgPath:"+imgPath+",opType:"+opType);
//        // 调用OCR算法服务
//        OkHttpClient client = new OkHttpClient();
//
//        // OCR算法服务
//        String url = OCR_TEXT_URL + imgPath;
//
//        Request requ = new Request.Builder()
//                .url(url)
//                .build();
//
//        String recJsonStr = "{}";
//        try {
//            Response response = client.newCall(requ).execute();
//            if (response.isSuccessful()) {
//                //recJsonStr = response.body().string();
//                // 解决Unicode的乱码问题
//                //recJsonStr = new String(response.body().bytes(), StandardCharsets.UTF_8);
//                recJsonStr = UnicodeUtil.toString(response.body().string());
//                log.info("=========== ocr识别结果 ：" + recJsonStr);
//            } else {
//                System.out.println("请求失败: " + response.code());
//            }
//        } catch (IOException e) {
//            log.error("【OCR 算法服务】识别图片发片异常！",e);
//        }
//        return recJsonStr;
//    }
//
//
//
//    @ApiOperation(value = "ocr图片识别-9: 全电子发票（普通发票）")
//    @GetMapping("/test/rec/v2_9")
//    public JResult electronicInvoiceNormalParse(HttpServletRequest request) {
//        JResult result = JResult.build();
//
//        long startTime = new Date().getTime();
//        String imgPath = request.getParameter("imgPath");
//
//        // 操作类型
//        String opType = request.getParameter("opType");
//
//        String recJsonStr = callOcrTextService(imgPath,opType);
//        log.info("=========== ocr 解析工厂 ============");
//        try {
//            InvoiceFeatureFactory featureFactory = new InvoiceFeatureFactory();
//            JSONObject data = featureFactory.transferAndIdentifyType(recJsonStr);
//
//            // 类型判断
//            String type = data.getString("type");
//            if(StringUtil.isEmpty(type) || !type.contains("vat_electronic_invoice_new")){
//                result.failed(4444,"请求的发票类型不正确！当前可以处理【全电子发票（普通发票）】的类型");
//                return result;
//            }
//
//            // 解析工厂
//            OcrTextParseAbstract textParseEntity = OcrTextParseFactory.textParse(recJsonStr);
//            JSONArray array = OcrTextResponseTransferUtil.transferMix2Json(textParseEntity);
//
//            long endTime = new Date().getTime();
//            // 消耗时间统计
//            long total = endTime - startTime;
//            log.info("=========消耗时间总计：" + total + " ms");
//            data.put("totalTime", total);
//            result.setTotalTime(total);
//            result.setData(array);
//
//        }catch (Exception e){
//            log.error("[解析发票发生异常]",e);
//            result.failed(e.getMessage());
//        }
//        //
//        return result;
//    }
//
//
//}
